{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 指示器随机变量解帽子核对问题，有n位顾客，n顶帽子，服务员随机归顺序归还帽子。请问拿到自己帽子的顾客数的期望值是多少",
   "id": "334eebe475a86c36"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-01T12:06:40.279779Z",
     "start_time": "2024-05-01T12:06:40.275060Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import random\n",
    "\n",
    "\n",
    "def expCapRight(n: int) -> int:\n",
    "    arr = [0] * n\n",
    "    for i in range(n):\n",
    "        arr[i] = random.randint(0, n - 1)\n",
    "    right = 0\n",
    "    for i in range(n):\n",
    "        if arr[i] == i:\n",
    "            right += 1\n",
    "    return right"
   ],
   "id": "7a44fc6c2e8631de",
   "outputs": [],
   "execution_count": 26
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-01T12:06:40.299284Z",
     "start_time": "2024-05-01T12:06:40.283874Z"
    }
   },
   "cell_type": "code",
   "source": [
    "n = 10000\n",
    "print(expCapRight(n))"
   ],
   "id": "54de21b671e7bedf",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n"
     ]
    }
   ],
   "execution_count": 27
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 获取一个数组中逆序对的个数",
   "id": "bf2b0836496f350c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-02T10:06:06.294018Z",
     "start_time": "2024-05-02T10:06:06.288481Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def getReversedOrderNum(arr: list) -> int:\n",
    "    num = 0\n",
    "    for i in range(1, len(arr)):\n",
    "        for j in range(i):\n",
    "            if arr[i] < arr[j]:\n",
    "                num += 1\n",
    "    return num"
   ],
   "id": "26ccf6020f55bf81",
   "outputs": [],
   "execution_count": 20
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-02T10:10:20.493995Z",
     "start_time": "2024-05-02T10:10:20.487935Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import random\n",
    "def plotdrawRandomReversed(n: int,time: int) -> list:\n",
    "    ans = []\n",
    "    maxRound = n*(n-1)//2\n",
    "    for _ in range(time):\n",
    "        ans.append(getReversedOrderNum(random.sample(range(n), n)))\n",
    "    p = [0] * maxRound\n",
    "    for i in ans:\n",
    "        p[i] += 1\n",
    "    return p\n",
    "n = 10\n",
    "arr = random.sample(range(n), n)\n",
    "print(arr)\n",
    "print(getReversedOrderNum(arr))"
   ],
   "id": "218ea4eb54788430",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[8, 7, 5, 6, 3, 1, 0, 9, 2, 4]\n",
      "31\n"
     ]
    }
   ],
   "execution_count": 35
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 获取一个无序数组中逆序对的期望值",
   "id": "a161f3a617bb8bf5"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-02T10:15:39.275706Z",
     "start_time": "2024-05-02T10:15:39.170596Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import matplotlib.pyplot as plt\n",
    "n = 10\n",
    "time = 500\n",
    "data = plotdrawRandomReversed(n,time)\n",
    "plt.plot(data)\n",
    "print(sum(([i*data[i] for i in range(len(data))]))//time)\n",
    "plt.show()\n",
    "# 大概是n*(n-1)/4   "
   ],
   "id": "111aeb57e3131f4",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "22\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 50
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 生日悖论，求一屋子里其中两人生日相同的机会达到50%",
   "id": "f14504f11c57dc7c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-02T11:07:18.072271Z",
     "start_time": "2024-05-02T11:07:18.067013Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def sameBirthday() -> int:\n",
    "    day = [0] * 365\n",
    "    same = 0\n",
    "    all = 0\n",
    "    while True:\n",
    "        temp = random.randint(0,364)\n",
    "        day[temp] += 1\n",
    "        if day[temp] > 1:\n",
    "            same += 1\n",
    "        all += 1\n",
    "        if (same/all) > 0.5:\n",
    "            break\n",
    "    return all"
   ],
   "id": "cf31e91e457e7fee",
   "outputs": [],
   "execution_count": 54
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-05-02T11:07:18.084401Z",
     "start_time": "2024-05-02T11:07:18.076414Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import random\n",
    "print([sameBirthday() for _ in range(10)])"
   ],
   "id": "384af3de8f1a907e",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[577, 581, 597, 595, 557, 577, 579, 557, 581, 619]\n"
     ]
    }
   ],
   "execution_count": 55
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
